package com.zx.system.block.service;

import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.ObjectWrapper;
import com.zx.core.wrapper.PageWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.system.block.model.SysTenant;
import com.zx.system.block.param.TenantParam;
import com.zx.system.block.vo.SysTenantVO;

/**
 * <p>
 * description: 业务层租户服务 <br>
 * create: 2025-11-23
 * </p>
 *
 * @author zhou xun
 */
public interface ISysTenantService {
    /**
     * 分页查询租户列表VO
     *
     * @param tenantParam 租户查询参数
     * @return {@link PageWrapper<SysTenantVO>}
     * @author zhou xun
     * @since 2025-11-23
     */
    PageWrapper<SysTenantVO> getTenantVOListByPage(TenantParam tenantParam);

    /**
     * 新增租户
     *
     * @param tenantParam 租户参数
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-23
     */
    ResponseWrapper addTenant(TenantParam tenantParam);

    /**
     * 编辑租户
     *
     * @param tenantParam 租户参数
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-23
     */
    ResponseWrapper editTenant(TenantParam tenantParam);

    /**
     * 编辑租户状态
     *
     * @param id     租户id
     * @param status 租户状态 0 停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-23
     */
    ResponseWrapper editTenantStatus(String id, Integer status);

    /**
     * 删除租户
     *
     * @param tenantId 租户id
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-23
     */
    ResponseWrapper deleteTenant(String tenantId);

    /**
     * 获取指定租户信息
     *
     * @param tenantId 租户ID
     * @return 租户信息包装对象
     */
    ObjectWrapper<SysTenant> selectTenantById(String tenantId);

    /**
     * 根据父租户ID查询子租户列表
     *
     * @param parentId 父租户ID
     * @return 子租户列表包装对象
     */
    ListWrapper<SysTenant> selectChildrenByParentId(String parentId);

    /**
     * 查询当前租户及其所有子租户
     *
     * @return 租户列表包装对象
     */
    ListWrapper<SysTenant> selectCurrentTenantTree();

    /**
     * 查询指定租户及其所有子租户
     *
     * @param tenantId 租户ID
     * @return 租户列表包装对象
     */
    ListWrapper<SysTenant> selectTenantTree(String tenantId);
}